package com.zhuoyue.system.mapper;


import com.zhuoyue.common.annotation.DataSource;
import com.zhuoyue.common.core.domain.TblCountAndTimeDO;
import com.zhuoyue.common.core.domain.TblReportFormsDO;
import com.zhuoyue.system.domain.vo.TblReportFormsVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

import static com.zhuoyue.common.enums.DataSourceType.*;

@DataSource(SLAVE)
public interface TblReportFormsMapperDao {
    /**
     * 获取用户，设备，网关消息数量，和报警
     *
     * @param tblReportFormsBO
     * @return
     */
    public TblReportFormsDO selectUserAndDeviceAndGatewayAndMessageCount(TblReportFormsVo tblReportFormsBO);

    /**
     * 获取用户，设备，网关消息数量，和报警消息 组织jizi专用
     *
     * @return
     */
    public TblReportFormsDO selectUserAndDeviceAndGatewayAndMessageCountByJiZi();

//-------------------------------------------用户报表区域-----------------------------------------------------------

    /**
     * 查询每天的注册人数
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseEveryDay(String orgCode);

    /**
     * 查询每周的注册人数
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseEveryWeek(String orgCode);

    /**
     * 查询每月的注册人数
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseEveryMonth(String orgCode);

    /**
     * 通过实践区域获取数据
     *
     * @param startTime
     * @param endTime
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseByTime(@Param("startTime") String startTime, @Param("endTime") String endTime);


//-----------------------------------------用户报表区域--orgCode----------------------------------------------------------

    /**
     * 查询每天的注册人数
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseEveryDayByOrgCode(TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每周的注册人数
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseEveryWeekByOrgCode(TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每月的注册人数
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseEveryMonthByOrgCode(TblReportFormsVo tblReportFormsBO);


    List<TblCountAndTimeDO> selectAppUseByTimeAndOrgCode(TblReportFormsVo tblReportFormsBO);


//**********************************************以下是设备区域********************************************

    /**
     * 查询每天的新增设备数量
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceEveryDay(String orgCode);

    /**
     * 查询每周的新增设备数量
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceEveryWeek(String orgCode);

    /**
     * 查询每月的新增设备数量
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceEveryMonth(String orgCode);

    /**
     * 时间区间-设备
     *
     * @param startTime
     * @param endTime
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceByTime(@Param("startTime") String startTime, @Param("endTime") String endTime);
//-----------------------------------------------设备报表区域--orgCode--------------------------------------------------------------

    /**
     * 查询每天的新增设备数量
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceEveryDayByOrgCode(TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每周的新增设备数量
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceEveryWeekByOrgCode(TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每月的新增设备数量
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceEveryMonthByOrgCode(TblReportFormsVo tblReportFormsBO);

    /**
     * 区间查询--设备数量
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceByTimeAndOrgCode(TblReportFormsVo tblReportFormsBO);


    //********************************************以上是设备区域**********************************************


    //**********************************************以下是消息区域******************************************************

    /**
     * 查询每天的消息数量
     *
     * @param orgCode
     * @return
     */
    @DataSource(SLAVE2)
    List<TblCountAndTimeDO> selectMessageEveryDay(@Param("tableName") List<String> tableList, @Param("orgCode") String orgCode);

    /**
     * 查询每周的消息数量
     *
     * @param orgCode
     * @return
     */
    @DataSource(SLAVE2)
    List<TblCountAndTimeDO> selectMessageEveryWeek(@Param("tableName") List<String> tableList, String orgCode);

    /**
     * 查询每月的消息数量
     *
     * @param orgCode
     * @return
     */
    @DataSource(SLAVE2)
    List<TblCountAndTimeDO> selectMessageEveryMonth(@Param("tableName") List<String> tableList, String orgCode);

    /**
     * 时间区间
     *
     * @param startTime
     * @param endTime
     * @return
     */
    @DataSource(SLAVE2)
    List<TblCountAndTimeDO> selectMessageByTime(@Param("tableName") List<String> tableList, @Param("startTime") String startTime, @Param("endTime") String endTime);


    //-------------------------------------------------------用户报表区域--orgCode-----------------------------------------------------------

    /**
     * 查询每天的消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    @DataSource(SLAVE2)
    //List<TblCountAndTimeDO> selectMessageEveryDayByOrgCode(@Param("tableName")List<String> tableList,@Param("orgCode")String orgCode,@Param("relationType")String relationType);
    List<TblCountAndTimeDO> selectMessageEveryDayByOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每周的消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    @DataSource(SLAVE2)
    List<TblCountAndTimeDO> selectMessageEveryWeekByOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每月的消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    @DataSource(SLAVE2)
    List<TblCountAndTimeDO> selectMessageEveryMonthByOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每月的消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    @DataSource(SLAVE2)
    List<TblCountAndTimeDO> selectMessageByTimeAndOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    //**********************************************以上是消息区域******************************************************


    //********************************************以下是报警消息部分**********************************************

    /**
     * 查询每天的报警消息数量
     *
     * @param orgCode
     * @return
     */
    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmEveryDay(@Param("tableName") List<String> tableList, String orgCode);

    /**
     * 查询每周的报警消息数量
     *
     * @param orgCode
     * @return
     */
    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmEveryWeek(@Param("tableName") List<String> tableList, String orgCode);

    /**
     * 查询每月的报警消息数量
     *
     * @param orgCode
     * @return
     */
    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmEveryMonth(@Param("tableName") List<String> tableList, String orgCode);

    /**
     * 时间区间-报警
     *
     * @param startTime
     * @param endTime
     * @return
     */
    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmByTime(@Param("tableName") List<String> tableList, @Param("startTime") String startTime, @Param("endTime") String endTime);


    //--------------------------------------------------------------------------------------------------------

    /**
     * 查询每天的报警消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmEveryDayByOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每周的报警消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmEveryWeekByOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每月的报警消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmEveryMonthByOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    @DataSource(SLAVE1)
    List<TblCountAndTimeDO> selectAlarmByTimeAndOrgCode(@Param("tableName") List<String> tableList, TblReportFormsVo tblReportFormsBO);

    //*************************************************以上是报警消息部分****************************************


    //*********************************************以下是网关部分*********************************************

    /**
     * 查询每天的报警消息数量
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayEveryDay(String orgCode);

    /**
     * 查询每周的报警消息数量
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayEveryWeek(String orgCode);

    /**
     * 查询每月的报警消息数量
     *
     * @param orgCode
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayEveryMonth(String orgCode);

    /**
     * 时间区间-网关
     *
     * @param startTime
     * @param endTime
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayByTime(@Param("startTime") String startTime, @Param("endTime") String endTime);
    //--------------------------------------------------------------------------------------------

    /**
     * 查询每天的报警消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayEveryDayByOrgCode(TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每周的报警消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayEveryWeekByOrgCode(TblReportFormsVo tblReportFormsBO);

    /**
     * 查询每月的报警消息数量
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayEveryMonthByOrgCode(TblReportFormsVo tblReportFormsBO);

    List<TblCountAndTimeDO> selectGateWayByTimeAndOrgCode(TblReportFormsVo tblReportFormsBO);
    //*********************************************以上是网关部分**************************************************


    //**********************************************以下是数据概览**************************************************

    /**
     * 查询七天中用户每天的总数
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectAppUseCountEveryWeek(TblReportFormsVo tblReportFormsBO);


    /**
     * 查询七天中设备每天的总数
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectDeviceCountEveryWeek(TblReportFormsVo tblReportFormsBO);

    /**
     * 查询七天中网关每天的总数
     *
     * @param tblReportFormsBO
     * @return
     */
    List<TblCountAndTimeDO> selectGateWayCountEveryWeek(TblReportFormsVo tblReportFormsBO);


}
